package boids.preys;

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.geom.Rectangle2D;
import java.util.ArrayList;

import boids.predators.Predator;




import util.Vector;


// deprecated

//public class GoodBoid extends AbstractPrey implements Prey
//{
//	private static double COHESION_WEIGHT = 1;
//	private static double SEPARATION_WEIGHT = 2;
//	private static double ALIGNMENT_WEIGHT = 1;
//	
//	public GoodBoid(Vector location, Vector velocity)
//	{
//		super(location, velocity);
//	}
//	
//	public void update(ArrayList<Prey> boids, ArrayList<Predator> predators)
//	{
//		velocity.divide(1.5);
//		oldLocation = location.clone();
//		oldVelocity = velocity.clone();
//		
//		findPredators(predators);
//		
//		Vector acceleration = cohesionAndSeparation(boids, predators).limit(MAX_FORCE);
//		velocity.add(acceleration);
//		velocity.limit(MAX_SPEED);
//		location.add(velocity);
//		
//		if (location.euclDistance(oldLocation) < 0.2)
//		{
//			location = oldLocation.clone();
//			velocity = oldVelocity.clone();
//		}
//	}
//	
//	private Vector cohesionAndSeparation(ArrayList<Prey> boids, ArrayList<Predator> predators)
//	{
//		Vector escapeRoute = new Vector();
//		int predatorCounter = 0;
//		
//		for (Predator p : predators)
//		{
//			if (location.euclDistance(p.getLocation()) < PERCEPTION_RADIUS)
//			{
//				escapeRoute.add(p.getLocation());
//				predatorCounter++;
//			}
//		}
//		
//		if (predatorCounter > 0)
//		{
//			escapeRoute.divide(predatorCounter);
//			escapeRoute = Vector.substract(location, escapeRoute);
//		}
//		
//		
//		Vector cohesion = new Vector();
//		Vector alignment = new Vector();
//		int neighborCounter = 0;
//		int alarmedCounter = 0;
//		
//		Vector separation = new Vector();
//		int separationCounter = 0;
//		
//		for (Prey b : boids)
//		{
//			double distance = location.euclDistance(b.getLocation());
//			
//			if (distance <= PERCEPTION_RADIUS && distance != 0)
//			{
//				cohesion.add(b.getLocation());
//				alignment.add(b.getVelocity());
//				neighborCounter++;
//				
//				if (distance <= PERCEPTION_RADIUS / 4)
//				{
//					if (distance <= SIZE + 2)
//					{
//						Vector target = Vector.add(location, Vector.substract(location, b.getLocation()));
//						target.add(escapeRoute);
//						separation = steerTo(target).normalize();
//						return separation;
//					}
//					
//					separation.add(Vector.substract(location, b.getLocation()).normalize().divide(distance));
//					separationCounter++;
//				}
//			}
//		}
//		
//		if (neighborCounter > 0)
//		{
//			cohesion.divide(neighborCounter);
//			double distanceToCenterOfFlock = location.euclDistance(cohesion);
//			
//			if (distanceToCenterOfFlock <= PERCEPTION_RADIUS/3)
//			{
//				cohesion = new Vector();
//				alignment.divide(neighborCounter);
//			}
//			else
//			{
//				cohesion = steerTo(cohesion);
//				alignment.divide(neighborCounter);
//			}
//		}
//		
//		if (separationCounter > 0)
//		{
//			separation.divide(separationCounter);
//		}
//		
//		cohesion.multiply(COHESION_WEIGHT);
//		separation.multiply(SEPARATION_WEIGHT);
//		alignment.multiply(ALIGNMENT_WEIGHT);
//		
//		return cohesion.add(separation).add(alignment).add(escapeRoute);
//	}
//}
